# 内置函数
# 所谓内置函数就是python安装后就自带有的函数
#########################数学运算#####################################
# abs：求取数字的绝对值
print(abs(10))
print(abs(-9))

# round求取近似值；第二个参数不写默认只保留整数部分；当指定第二个参数时，可以指定小数点后保留的位置
print(round(2.855,2))

# pow：求取某两个数字的指数运算
# pow有三个参数，前两个参数表示第一个参数的多少次（第二个参数）的幂
# 如果指定第三个参数，则表示前两个参数的指数运算结果与第三个参数求余的操作
print(pow(3,2))    #表示的是3的2次方
print(pow(3,2,2))   #表示的是（3的2次方）%2

# divmod：求商和余数；返回一个包含商和余数的元组(a // b, a % b)
print(divmod(8,3))

# max求取最大值
print(max(1,9,22,67,21))

# min求取最小值
print(min(1,9,22,67,21))

# sum求和运算；第一个参数为一个可迭代的对象；第二个参数可选，若不填写，默认为0，若填写，表示前面求和运算后再与第二个参数相加
print(sum([1,5,82,3],9))

#eval函数，用来执行一个字符串的表达式，并返回执行结果
print(eval('a+b+c',{'c':3,'a':1,'b':3}))
def func1():
    return "helloWorld!"
    pass
func1()
print(eval("func1()"))


###############################类型转换####################################################
# int() 函数用于将一个字符串或数字转换为整型
print(int("6"))
print(type(int("6")))
print(int(6.68))

# float()函数，用于将整数和字符串转换成浮点数
print(float(8))
print(float("8"))

# str() 函数将对象转化为适于人阅读的形式
print(str(6))
print(type(str(6.8)))

# ord() 函数是 chr() 函数（对于8位的ASCII字符串）或 unichr() 函数（对于Unicode对象）的配对函数，
# 它以一个字符（长度为1的字符串）作为参数，返回对应的 ASCII 数值，或者 Unicode 数值，
# 如果所给的 Unicode 字符超出了你的 Python 定义范围，则会引发一个 TypeError 的异常
print(ord("a"))

# chr() 用一个范围在 range（256）内的（就是0～255）整数作参数，返回一个对应的字符
print(chr(97))

# bool() 函数用于将给定参数转换为布尔类型，如果没有参数，返回 False
# 下列对象都相当于False：[],(),{},0, None, 0.0, ''
print(bool("python"))

#  bin() 返回一个整数 int 或者长整数 long int 的二进制表示
print(bin(8))    #1000
print(bin(12))    #1100

#  hex() 函数用于将10进制整数转换成16进制，以字符串形式表示
print(hex(18))  #0 1 2 3 4 5 6 7 8 9 A B C D E F

# oct() 函数将一个整数转换成8进制字符串
print(oct(12))

# list() 方法用于将元组转换为列表
tuple1=(1,2,3,4,5)
list1=list(tuple1)
print(list1)
list1.append(4)
print(list1)
print(type(tuple1))

# tuple()函数将列表转换为元组
tuple2=tuple(list1)
print(tuple2)

# dict() 函数用于创建一个字典
print(dict(name="红桃7",age=18))

#  bytes()方法返回一个新字节数组，这个数组里的元素是可变的，并且每个元素的值范围: 0 <= x < 256
print(bytes("青",encoding="UTF-8"))
print(bytes(8))

######################序列操作###################################
# all函数用于判断给定的可迭代参数 iterable 中的所有元素是否都为 TRUE，如果是返回 True，
# 否则返回 False元素除了是 0、空、FALSE 外都算 TRUE
list1=[1,9,4.5,"python",0]
print(all(list1))
# 空元祖,空列表返回值为True
print(all([]))

# any() 函数用于判断给定的可迭代参数 iterable 是否全部为 False，则返回 False，
# 如果有一个为 True，则返回 True
print(any(list1))

# sorted() 函数对所有可迭代的对象进行排序操作
# sort与sorted 区别：
# sort是应用在 list 上的方法，sorted 可以对所有可迭代的对象进行排序操作,
# list 的 sort 方法返回的是对已经存在的列表进行操作，
# 而内建函数 sorted 方法返回的是一个新的 list，而不是在原来的基础上进行的操作
list2=[1,5,9,3,77,23]
print(list2)
# list2.sort()   sort方法，对原列表进行操作
print(list2)
# reverse=True则列表倒序排列
list3=sorted(list2,reverse=True)   #sorted函数，返回一个排序后的新列表，而不会对原列表进行操作
print(list2)
print(list3)

# reverse() 函数用于反向列表中元素
list3.reverse()
print(list3)

# range() 函数可创建一个整数列表，一般用在 for 循环中
for item in range(0,10):
    print(item)
    pass

# zip() 函数用于将可迭代的对象作为参数，将对象中对应的元素打包成一个个元组，然后返回由这些元组组成的列表
# 如果各个迭代器的元素个数不一致，则返回列表长度与最短的对象相同，利用 * 号操作符，可以将元组解压为列表
list4=["name","age","hobby","phone","num","address"]
list5=["tom",23,"唱歌",1342345677,88888]
print(list(zip(list4,list5)))

# enumerate()函数用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列，
# 同时列出数据和数据下标，一般用在 for 循环当中
for item in enumerate(list4,5):
    # print(index)    #打印索引信息
    print(item)    #打印结果
    pass
print("=======================")
# 参数可以为字典类型的数据，以键值进行打包处理
dict1={"name":"tom","age":32}
for item in enumerate(dict1):
    print(item)
    pass

# 模拟图书馆图书信息录入
# 要求：可以批量输入图书信息（序号、书名、位置），可以使用临时数据库（列表） 进行存储数据
# 输入完毕后，打印图书信息
def printBookInfo():
    books=[]   #创建一个列表用于存储图书信息
    bookIndex=input("请输入图书编号，以空格分隔")
    bookName = input("请输入图书名字，以空格分隔")
    bookAddress = input("请输入图书所在位置，以空格分隔")
    indexList=bookIndex.split(" ") #将用户信息进行处理，使用split方法对数据分隔成列表
    nameList = bookName.split(" ")  # 将用户信息进行处理，使用split方法对数据分隔成列表
    addressList = bookAddress.split(" ")  # 将用户信息进行处理，使用split方法对数据分隔成列表
    bookInfoes=zip(indexList,nameList,addressList)
    for item in bookInfoes:
        print(item)
        bookInfo={"书籍编号":item[0],"书籍名字":item[1],"书籍地址":item[2]}
        books.append(bookInfo)
        pass
    for i in books:
        print(i)
        pass
    pass
printBookInfo()

